{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8fe19b15",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy\n",
    "import matplotlib.pyplot as plt\n",
    "from pandas import read_csv\n",
    "import math\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import LSTM\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from pandas import concat\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d273afaa",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pandas import read_csv\n",
    "from datetime import datetime\n",
    "# load data\n",
    "dataset = read_csv('shang04_max.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8f931387",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    ����ʱ��  �й��������ֵ��kw��  ��  ��.1  һ��ڼ���  һ��ڼ���.1  weekday  ����  \\\n",
      "0  2019/1/1         64027.8582   1     1        1          1        1     1   \n",
      "1  2019/1/2         75467.2143   1     2        2          1        2     1   \n",
      "2  2019/1/3        132776.9442   1     3        3          1        3     1   \n",
      "3  2019/1/4         97731.1308   1     4        4          1        4     1   \n",
      "4  2019/1/5        132883.1868   1     5        5          1        5     1   \n",
      "\n",
      "   �Ƿ��³�  �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  ����״��  ����¶�  ����¶�.1  \\\n",
      "0       1       0      1      0         0      3.0    12.0       7.0   \n",
      "1       0       0      0      0         0      5.0    11.0       6.0   \n",
      "2       0       0      0      0         0      2.0    15.0       9.0   \n",
      "3       0       0      0      0         0      3.0    17.0      12.0   \n",
      "4       0       0      0      0         1      3.0    17.0      12.0   \n",
      "\n",
      "   �����������  ҹ����������  \n",
      "0         11.0          8.0  \n",
      "1         11.0          8.0  \n",
      "2         11.0          8.0  \n",
      "3         11.0          8.0  \n",
      "4         11.0          8.0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2543c3f1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# manually specify column names\n",
    "#dataset.drop('Unnamed: 0 ', axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "82c5bfba",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    ����ʱ��  �й��������ֵ��kw��  ��  ��.1  һ��ڼ���  һ��ڼ���.1  weekday  ����  \\\n",
      "0  2019/1/1         64027.8582   1     1        1          1        1     1   \n",
      "1  2019/1/2         75467.2143   1     2        2          1        2     1   \n",
      "2  2019/1/3        132776.9442   1     3        3          1        3     1   \n",
      "3  2019/1/4         97731.1308   1     4        4          1        4     1   \n",
      "4  2019/1/5        132883.1868   1     5        5          1        5     1   \n",
      "\n",
      "   �Ƿ��³�  �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  ����״��  ����¶�  ����¶�.1  \\\n",
      "0       1       0      1      0         0      3.0    12.0       7.0   \n",
      "1       0       0      0      0         0      5.0    11.0       6.0   \n",
      "2       0       0      0      0         0      2.0    15.0       9.0   \n",
      "3       0       0      0      0         0      3.0    17.0      12.0   \n",
      "4       0       0      0      0         1      3.0    17.0      12.0   \n",
      "\n",
      "   �����������  ҹ����������  \n",
      "0         11.0          8.0  \n",
      "1         11.0          8.0  \n",
      "2         11.0          8.0  \n",
      "3         11.0          8.0  \n",
      "4         11.0          8.0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b9af4d79",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.columns = ['数据时间','有功功率最大值（kw）','月','天','一年第几天','一年第几周','weekday','季节','是否月初','是否月末','是否季节初','是否季节末','是否周末','天气状况','最高温度','最低温度','白天风力风向','夜晚风力风向']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7424ebc2",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.drop('数据时间', axis=1, inplace=True)\n",
    "# summarize first 5 rows\n",
    "#print(dataset.head(5))\n",
    "# save to file\n",
    "dataset.to_csv('power.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "3a01e663",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      有功功率最大值（kw）   月   天  一年第几天  一年第几周  weekday  季节  是否月初  是否月末  是否季节初  \\\n",
      "0      64027.8582   1   1      1      1        1   1     1     0      1   \n",
      "1      75467.2143   1   2      2      1        2   1     0     0      0   \n",
      "2     132776.9442   1   3      3      1        3   1     0     0      0   \n",
      "3      97731.1308   1   4      4      1        4   1     0     0      0   \n",
      "4     132883.1868   1   5      5      1        5   1     0     0      0   \n",
      "...           ...  ..  ..    ...    ...      ...  ..   ...   ...    ...   \n",
      "1060          NaN  11  26    330     47        4   4     0     0      0   \n",
      "1061          NaN  11  27    331     47        5   4     0     0      0   \n",
      "1062          NaN  11  28    332     47        6   4     0     0      0   \n",
      "1063          NaN  11  29    333     48        0   4     0     0      0   \n",
      "1064          NaN  11  30    334     48        1   4     0     1      0   \n",
      "\n",
      "      是否季节末  是否周末  天气状况   最高温度   最低温度  白天风力风向  夜晚风力风向  \n",
      "0         0     0  3.00  12.00   7.00   11.00    8.00  \n",
      "1         0     0  5.00  11.00   6.00   11.00    8.00  \n",
      "2         0     0  2.00  15.00   9.00   11.00    8.00  \n",
      "3         0     0  3.00  17.00  12.00   11.00    8.00  \n",
      "4         0     1  3.00  17.00  12.00   11.00    8.00  \n",
      "...     ...   ...   ...    ...    ...     ...     ...  \n",
      "1060      0     0  2.00  25.80  16.35   15.20   12.20  \n",
      "1061      0     1  2.00  23.65  15.30   19.40   16.40  \n",
      "1062      0     1  1.15  21.40  13.50   21.15   18.15  \n",
      "1063      0     0  1.85  22.05  13.65   15.20   12.20  \n",
      "1064      0     0  1.15  22.50  14.20   20.40   17.40  \n",
      "\n",
      "[1065 rows x 17 columns]\n"
     ]
    }
   ],
   "source": [
    "print(dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4c4e13a4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<bound method NDFrame.head of      var1(t-1)  var2(t-1)  var3(t-1)  var4(t-1)  var5(t-1)  var6(t-1)  \\\n",
      "1     0.266259   0.000000   0.000000   0.000000   0.000000   0.166667   \n",
      "2     0.315454   0.000000   0.033333   0.002740   0.000000   0.333333   \n",
      "3     0.561911   0.000000   0.066667   0.005479   0.000000   0.500000   \n",
      "4     0.411198   0.000000   0.100000   0.008219   0.000000   0.666667   \n",
      "5     0.562368   0.000000   0.133333   0.010959   0.000000   0.833333   \n",
      "..         ...        ...        ...        ...        ...        ...   \n",
      "969   0.440349   0.636364   0.833333   0.649315   0.634615   0.500000   \n",
      "970   0.441292   0.636364   0.866667   0.652055   0.634615   0.666667   \n",
      "971   0.394530   0.636364   0.900000   0.654795   0.634615   0.833333   \n",
      "972   0.352695   0.636364   0.933333   0.657534   0.634615   1.000000   \n",
      "973   0.433217   0.636364   0.966667   0.660274   0.653846   0.000000   \n",
      "\n",
      "     var7(t-1)  var8(t-1)  var9(t-1)  var10(t-1)  var11(t-1)  var12(t-1)  \\\n",
      "1     0.000000        1.0        0.0         1.0         0.0         0.0   \n",
      "2     0.000000        0.0        0.0         0.0         0.0         0.0   \n",
      "3     0.000000        0.0        0.0         0.0         0.0         0.0   \n",
      "4     0.000000        0.0        0.0         0.0         0.0         0.0   \n",
      "5     0.000000        0.0        0.0         0.0         0.0         1.0   \n",
      "..         ...        ...        ...         ...         ...         ...   \n",
      "969   0.666667        0.0        0.0         0.0         0.0         0.0   \n",
      "970   0.666667        0.0        0.0         0.0         0.0         0.0   \n",
      "971   0.666667        0.0        0.0         0.0         0.0         1.0   \n",
      "972   0.666667        0.0        0.0         0.0         0.0         1.0   \n",
      "973   0.666667        0.0        0.0         0.0         0.0         0.0   \n",
      "\n",
      "     var13(t-1)  var14(t-1)  var15(t-1)  var16(t-1)  var17(t-1)   var1(t)  \n",
      "1         0.250    0.071429    0.153846       0.000       0.000  0.315454  \n",
      "2         0.500    0.035714    0.115385       0.000       0.000  0.561911  \n",
      "3         0.125    0.178571    0.230769       0.000       0.000  0.411198  \n",
      "4         0.250    0.250000    0.346154       0.000       0.000  0.562368  \n",
      "5         0.250    0.250000    0.346154       0.000       0.000  0.401006  \n",
      "..          ...         ...         ...         ...         ...       ...  \n",
      "969       1.000    0.892857    0.923077       0.875       0.875  0.441292  \n",
      "970       1.000    0.892857    0.884615       0.875       0.875  0.394530  \n",
      "971       0.125    0.821429    0.884615       0.875       0.875  0.352695  \n",
      "972       1.000    0.785714    0.846154       0.875       0.875  0.433217  \n",
      "973       1.000    0.857143    0.884615       0.875       0.875  0.405458  \n",
      "\n",
      "[973 rows x 18 columns]>\n"
     ]
    }
   ],
   "source": [
    "# prepare data for lstm\n",
    "from pandas import DataFrame\n",
    "from pandas import concat\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "\n",
    "# convert series to supervised learning\n",
    "def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):\n",
    "    n_vars = 1 if type(data) is list else data.shape[1]\n",
    "    df = DataFrame(data)\n",
    "    cols, names = list(), list()\n",
    "    # input sequence (t-n, ... t-1)\n",
    "    for i in range(n_in, 0, -1):\n",
    "        cols.append(df.shift(i))\n",
    "        names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # forecast sequence (t, t+1, ... t+n)\n",
    "    for i in range(0, n_out):\n",
    "        cols.append(df.shift(-i))\n",
    "        if i == 0:\n",
    "            names += [('var%d(t)' % (j+1)) for j in range(n_vars)]\n",
    "        else:\n",
    "            names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # put it all together\n",
    "    agg = concat(cols, axis=1)\n",
    "    agg.columns = names\n",
    "    # drop rows with NaN values\n",
    "    if dropnan:\n",
    "        agg.dropna(inplace=True)\n",
    "    return agg\n",
    "\n",
    "# load dataset\n",
    "dataset = read_csv('power.csv', header=0, index_col=0)\n",
    "values = dataset.values\n",
    "# integer encode direction\n",
    "encoder = LabelEncoder()\n",
    "values[:,4] = encoder.fit_transform(values[:,4])\n",
    "# ensure all data is float\n",
    "values = values.astype('float32')\n",
    "# normalize features\n",
    "scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "scaled = scaler.fit_transform(values)\n",
    "# frame as supervised learning\n",
    "reframed = series_to_supervised(scaled, 1, 1)\n",
    "# drop columns we don't want to predict\n",
    "reframed.drop(reframed.columns[[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]], axis=1, inplace=True)\n",
    "#print(reframed.head())\n",
    "print(reframed.head)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "31d34811",
   "metadata": {},
   "outputs": [],
   "source": [
    "#plt.plot(reframed)\n",
    "#plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b8a051ee",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(882, 1, 17) (882,) (91, 1, 17) (91,)\n"
     ]
    }
   ],
   "source": [
    "...\n",
    "# split into train and test sets\n",
    "values = reframed.values\n",
    "n_train_hours = int(len(reframed)-91)\n",
    "train = values[:n_train_hours, :]\n",
    "test = values[n_train_hours:, :]\n",
    "# split into input and outputs\n",
    "train_X, train_y = train[:, :-1], train[:, -1]\n",
    "test_X, test_y = test[:, :-1], test[:, -1]\n",
    "# reshape input to be 3D [samples, timesteps, features]\n",
    "train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))\n",
    "test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))\n",
    "print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f1dfb13d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "13/13 - 1s - loss: 0.3872 - val_loss: 0.2227 - 1s/epoch - 94ms/step\n",
      "Epoch 2/100\n",
      "13/13 - 0s - loss: 0.2276 - val_loss: 0.0412 - 28ms/epoch - 2ms/step\n",
      "Epoch 3/100\n",
      "13/13 - 0s - loss: 0.1904 - val_loss: 0.0682 - 26ms/epoch - 2ms/step\n",
      "Epoch 4/100\n",
      "13/13 - 0s - loss: 0.1692 - val_loss: 0.0475 - 27ms/epoch - 2ms/step\n",
      "Epoch 5/100\n",
      "13/13 - 0s - loss: 0.1563 - val_loss: 0.0365 - 27ms/epoch - 2ms/step\n",
      "Epoch 6/100\n",
      "13/13 - 0s - loss: 0.1487 - val_loss: 0.0385 - 27ms/epoch - 2ms/step\n",
      "Epoch 7/100\n",
      "13/13 - 0s - loss: 0.1431 - val_loss: 0.0381 - 27ms/epoch - 2ms/step\n",
      "Epoch 8/100\n",
      "13/13 - 0s - loss: 0.1367 - val_loss: 0.0389 - 27ms/epoch - 2ms/step\n",
      "Epoch 9/100\n",
      "13/13 - 0s - loss: 0.1304 - val_loss: 0.0416 - 28ms/epoch - 2ms/step\n",
      "Epoch 10/100\n",
      "13/13 - 0s - loss: 0.1255 - val_loss: 0.0444 - 28ms/epoch - 2ms/step\n",
      "Epoch 11/100\n",
      "13/13 - 0s - loss: 0.1209 - val_loss: 0.0467 - 27ms/epoch - 2ms/step\n",
      "Epoch 12/100\n",
      "13/13 - 0s - loss: 0.1172 - val_loss: 0.0473 - 27ms/epoch - 2ms/step\n",
      "Epoch 13/100\n",
      "13/13 - 0s - loss: 0.1140 - val_loss: 0.0450 - 26ms/epoch - 2ms/step\n",
      "Epoch 14/100\n",
      "13/13 - 0s - loss: 0.1125 - val_loss: 0.0428 - 28ms/epoch - 2ms/step\n",
      "Epoch 15/100\n",
      "13/13 - 0s - loss: 0.1088 - val_loss: 0.0426 - 27ms/epoch - 2ms/step\n",
      "Epoch 16/100\n",
      "13/13 - 0s - loss: 0.1081 - val_loss: 0.0406 - 27ms/epoch - 2ms/step\n",
      "Epoch 17/100\n",
      "13/13 - 0s - loss: 0.1055 - val_loss: 0.0401 - 29ms/epoch - 2ms/step\n",
      "Epoch 18/100\n",
      "13/13 - 0s - loss: 0.1039 - val_loss: 0.0395 - 30ms/epoch - 2ms/step\n",
      "Epoch 19/100\n",
      "13/13 - 0s - loss: 0.1017 - val_loss: 0.0388 - 28ms/epoch - 2ms/step\n",
      "Epoch 20/100\n",
      "13/13 - 0s - loss: 0.1003 - val_loss: 0.0382 - 28ms/epoch - 2ms/step\n",
      "Epoch 21/100\n",
      "13/13 - 0s - loss: 0.0980 - val_loss: 0.0375 - 27ms/epoch - 2ms/step\n",
      "Epoch 22/100\n",
      "13/13 - 0s - loss: 0.0970 - val_loss: 0.0369 - 28ms/epoch - 2ms/step\n",
      "Epoch 23/100\n",
      "13/13 - 0s - loss: 0.0942 - val_loss: 0.0359 - 27ms/epoch - 2ms/step\n",
      "Epoch 24/100\n",
      "13/13 - 0s - loss: 0.0941 - val_loss: 0.0358 - 26ms/epoch - 2ms/step\n",
      "Epoch 25/100\n",
      "13/13 - 0s - loss: 0.0903 - val_loss: 0.0351 - 28ms/epoch - 2ms/step\n",
      "Epoch 26/100\n",
      "13/13 - 0s - loss: 0.0942 - val_loss: 0.0348 - 27ms/epoch - 2ms/step\n",
      "Epoch 27/100\n",
      "13/13 - 0s - loss: 0.0875 - val_loss: 0.0343 - 27ms/epoch - 2ms/step\n",
      "Epoch 28/100\n",
      "13/13 - 0s - loss: 0.0956 - val_loss: 0.0343 - 26ms/epoch - 2ms/step\n",
      "Epoch 29/100\n",
      "13/13 - 0s - loss: 0.0859 - val_loss: 0.0337 - 27ms/epoch - 2ms/step\n",
      "Epoch 30/100\n",
      "13/13 - 0s - loss: 0.0958 - val_loss: 0.0356 - 26ms/epoch - 2ms/step\n",
      "Epoch 31/100\n",
      "13/13 - 0s - loss: 0.0826 - val_loss: 0.0339 - 28ms/epoch - 2ms/step\n",
      "Epoch 32/100\n",
      "13/13 - 0s - loss: 0.0917 - val_loss: 0.0353 - 27ms/epoch - 2ms/step\n",
      "Epoch 33/100\n",
      "13/13 - 0s - loss: 0.0781 - val_loss: 0.0328 - 26ms/epoch - 2ms/step\n",
      "Epoch 34/100\n",
      "13/13 - 0s - loss: 0.0860 - val_loss: 0.0334 - 28ms/epoch - 2ms/step\n",
      "Epoch 35/100\n",
      "13/13 - 0s - loss: 0.0759 - val_loss: 0.0324 - 27ms/epoch - 2ms/step\n",
      "Epoch 36/100\n",
      "13/13 - 0s - loss: 0.0826 - val_loss: 0.0325 - 27ms/epoch - 2ms/step\n",
      "Epoch 37/100\n",
      "13/13 - 0s - loss: 0.0727 - val_loss: 0.0323 - 27ms/epoch - 2ms/step\n",
      "Epoch 38/100\n",
      "13/13 - 0s - loss: 0.0808 - val_loss: 0.0317 - 26ms/epoch - 2ms/step\n",
      "Epoch 39/100\n",
      "13/13 - 0s - loss: 0.0702 - val_loss: 0.0322 - 26ms/epoch - 2ms/step\n",
      "Epoch 40/100\n",
      "13/13 - 0s - loss: 0.0766 - val_loss: 0.0306 - 28ms/epoch - 2ms/step\n",
      "Epoch 41/100\n",
      "13/13 - 0s - loss: 0.0672 - val_loss: 0.0330 - 27ms/epoch - 2ms/step\n",
      "Epoch 42/100\n",
      "13/13 - 0s - loss: 0.0732 - val_loss: 0.0303 - 27ms/epoch - 2ms/step\n",
      "Epoch 43/100\n",
      "13/13 - 0s - loss: 0.0653 - val_loss: 0.0342 - 26ms/epoch - 2ms/step\n",
      "Epoch 44/100\n",
      "13/13 - 0s - loss: 0.0695 - val_loss: 0.0312 - 28ms/epoch - 2ms/step\n",
      "Epoch 45/100\n",
      "13/13 - 0s - loss: 0.0634 - val_loss: 0.0388 - 27ms/epoch - 2ms/step\n",
      "Epoch 46/100\n",
      "13/13 - 0s - loss: 0.0679 - val_loss: 0.0323 - 27ms/epoch - 2ms/step\n",
      "Epoch 47/100\n",
      "13/13 - 0s - loss: 0.0628 - val_loss: 0.0412 - 27ms/epoch - 2ms/step\n",
      "Epoch 48/100\n",
      "13/13 - 0s - loss: 0.0651 - val_loss: 0.0330 - 27ms/epoch - 2ms/step\n",
      "Epoch 49/100\n",
      "13/13 - 0s - loss: 0.0599 - val_loss: 0.0389 - 27ms/epoch - 2ms/step\n",
      "Epoch 50/100\n",
      "13/13 - 0s - loss: 0.0598 - val_loss: 0.0343 - 26ms/epoch - 2ms/step\n",
      "Epoch 51/100\n",
      "13/13 - 0s - loss: 0.0576 - val_loss: 0.0351 - 27ms/epoch - 2ms/step\n",
      "Epoch 52/100\n",
      "13/13 - 0s - loss: 0.0543 - val_loss: 0.0309 - 28ms/epoch - 2ms/step\n",
      "Epoch 53/100\n",
      "13/13 - 0s - loss: 0.0553 - val_loss: 0.0309 - 28ms/epoch - 2ms/step\n",
      "Epoch 54/100\n",
      "13/13 - 0s - loss: 0.0534 - val_loss: 0.0335 - 27ms/epoch - 2ms/step\n",
      "Epoch 55/100\n",
      "13/13 - 0s - loss: 0.0531 - val_loss: 0.0310 - 28ms/epoch - 2ms/step\n",
      "Epoch 56/100\n",
      "13/13 - 0s - loss: 0.0553 - val_loss: 0.0317 - 30ms/epoch - 2ms/step\n",
      "Epoch 57/100\n",
      "13/13 - 0s - loss: 0.0544 - val_loss: 0.0367 - 27ms/epoch - 2ms/step\n",
      "Epoch 58/100\n",
      "13/13 - 0s - loss: 0.0548 - val_loss: 0.0310 - 26ms/epoch - 2ms/step\n",
      "Epoch 59/100\n",
      "13/13 - 0s - loss: 0.0546 - val_loss: 0.0350 - 27ms/epoch - 2ms/step\n",
      "Epoch 60/100\n",
      "13/13 - 0s - loss: 0.0608 - val_loss: 0.0384 - 28ms/epoch - 2ms/step\n",
      "Epoch 61/100\n",
      "13/13 - 0s - loss: 0.0537 - val_loss: 0.0311 - 25ms/epoch - 2ms/step\n",
      "Epoch 62/100\n",
      "13/13 - 0s - loss: 0.0551 - val_loss: 0.0363 - 27ms/epoch - 2ms/step\n",
      "Epoch 63/100\n",
      "13/13 - 0s - loss: 0.0598 - val_loss: 0.0338 - 27ms/epoch - 2ms/step\n",
      "Epoch 64/100\n",
      "13/13 - 0s - loss: 0.0517 - val_loss: 0.0331 - 28ms/epoch - 2ms/step\n",
      "Epoch 65/100\n",
      "13/13 - 0s - loss: 0.0564 - val_loss: 0.0390 - 28ms/epoch - 2ms/step\n",
      "Epoch 66/100\n",
      "13/13 - 0s - loss: 0.0568 - val_loss: 0.0306 - 26ms/epoch - 2ms/step\n",
      "Epoch 67/100\n",
      "13/13 - 0s - loss: 0.0505 - val_loss: 0.0341 - 29ms/epoch - 2ms/step\n",
      "Epoch 68/100\n",
      "13/13 - 0s - loss: 0.0548 - val_loss: 0.0365 - 27ms/epoch - 2ms/step\n",
      "Epoch 69/100\n",
      "13/13 - 0s - loss: 0.0558 - val_loss: 0.0306 - 29ms/epoch - 2ms/step\n",
      "Epoch 70/100\n",
      "13/13 - 0s - loss: 0.0510 - val_loss: 0.0358 - 27ms/epoch - 2ms/step\n",
      "Epoch 71/100\n",
      "13/13 - 0s - loss: 0.0554 - val_loss: 0.0345 - 27ms/epoch - 2ms/step\n",
      "Epoch 72/100\n",
      "13/13 - 0s - loss: 0.0542 - val_loss: 0.0309 - 27ms/epoch - 2ms/step\n",
      "Epoch 73/100\n",
      "13/13 - 0s - loss: 0.0514 - val_loss: 0.0326 - 28ms/epoch - 2ms/step\n",
      "Epoch 74/100\n",
      "13/13 - 0s - loss: 0.0528 - val_loss: 0.0303 - 28ms/epoch - 2ms/step\n",
      "Epoch 75/100\n",
      "13/13 - 0s - loss: 0.0529 - val_loss: 0.0376 - 28ms/epoch - 2ms/step\n",
      "Epoch 76/100\n",
      "13/13 - 0s - loss: 0.0611 - val_loss: 0.0402 - 26ms/epoch - 2ms/step\n",
      "Epoch 77/100\n",
      "13/13 - 0s - loss: 0.0517 - val_loss: 0.0303 - 27ms/epoch - 2ms/step\n",
      "Epoch 78/100\n",
      "13/13 - 0s - loss: 0.0535 - val_loss: 0.0393 - 27ms/epoch - 2ms/step\n",
      "Epoch 79/100\n",
      "13/13 - 0s - loss: 0.0584 - val_loss: 0.0341 - 27ms/epoch - 2ms/step\n",
      "Epoch 80/100\n",
      "13/13 - 0s - loss: 0.0504 - val_loss: 0.0310 - 27ms/epoch - 2ms/step\n",
      "Epoch 81/100\n",
      "13/13 - 0s - loss: 0.0532 - val_loss: 0.0368 - 27ms/epoch - 2ms/step\n",
      "Epoch 82/100\n",
      "13/13 - 0s - loss: 0.0550 - val_loss: 0.0302 - 28ms/epoch - 2ms/step\n",
      "Epoch 83/100\n",
      "13/13 - 0s - loss: 0.0493 - val_loss: 0.0342 - 28ms/epoch - 2ms/step\n",
      "Epoch 84/100\n",
      "13/13 - 0s - loss: 0.0540 - val_loss: 0.0354 - 27ms/epoch - 2ms/step\n",
      "Epoch 85/100\n",
      "13/13 - 0s - loss: 0.0542 - val_loss: 0.0302 - 27ms/epoch - 2ms/step\n",
      "Epoch 86/100\n",
      "13/13 - 0s - loss: 0.0499 - val_loss: 0.0340 - 27ms/epoch - 2ms/step\n",
      "Epoch 87/100\n",
      "13/13 - 0s - loss: 0.0534 - val_loss: 0.0308 - 27ms/epoch - 2ms/step\n",
      "Epoch 88/100\n",
      "13/13 - 0s - loss: 0.0528 - val_loss: 0.0347 - 27ms/epoch - 2ms/step\n",
      "Epoch 89/100\n",
      "13/13 - 0s - loss: 0.0589 - val_loss: 0.0386 - 28ms/epoch - 2ms/step\n",
      "Epoch 90/100\n",
      "13/13 - 0s - loss: 0.0528 - val_loss: 0.0307 - 27ms/epoch - 2ms/step\n",
      "Epoch 91/100\n",
      "13/13 - 0s - loss: 0.0521 - val_loss: 0.0372 - 28ms/epoch - 2ms/step\n",
      "Epoch 92/100\n",
      "13/13 - 0s - loss: 0.0571 - val_loss: 0.0378 - 27ms/epoch - 2ms/step\n",
      "Epoch 93/100\n",
      "13/13 - 0s - loss: 0.0503 - val_loss: 0.0300 - 30ms/epoch - 2ms/step\n",
      "Epoch 94/100\n",
      "13/13 - 0s - loss: 0.0509 - val_loss: 0.0359 - 29ms/epoch - 2ms/step\n",
      "Epoch 95/100\n",
      "13/13 - 0s - loss: 0.0542 - val_loss: 0.0308 - 26ms/epoch - 2ms/step\n",
      "Epoch 96/100\n",
      "13/13 - 0s - loss: 0.0493 - val_loss: 0.0336 - 27ms/epoch - 2ms/step\n",
      "Epoch 97/100\n",
      "13/13 - 0s - loss: 0.0551 - val_loss: 0.0388 - 27ms/epoch - 2ms/step\n",
      "Epoch 98/100\n",
      "13/13 - 0s - loss: 0.0543 - val_loss: 0.0301 - 27ms/epoch - 2ms/step\n",
      "Epoch 99/100\n",
      "13/13 - 0s - loss: 0.0482 - val_loss: 0.0325 - 28ms/epoch - 2ms/step\n",
      "Epoch 100/100\n",
      "13/13 - 0s - loss: 0.0538 - val_loss: 0.0378 - 27ms/epoch - 2ms/step\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "...\n",
    "# design network\n",
    "model = Sequential()\n",
    "model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))\n",
    "model.add(Dense(1))\n",
    "model.compile(loss='mae', optimizer='adam')\n",
    "# fit network\n",
    "history = model.fit(train_X, train_y, epochs=100, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)\n",
    "# plot history\n",
    "plt.plot(history.history['loss'], label='train')\n",
    "plt.plot(history.history['val_loss'], label='test')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "64a0d2b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# make predictions\n",
    "#trainPredict = model.predict(train_X)\n",
    "#testPredict = model.predict(test_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7c7a3607",
   "metadata": {},
   "outputs": [],
   "source": [
    "...\n",
    "# make a prediction\n",
    "yhat = model.predict(test_X)\n",
    "test_X = test_X.reshape((test_X.shape[0], test_X.shape[2]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "2e095d4f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(91, 1) (91, 17)\n"
     ]
    }
   ],
   "source": [
    "yhat=DataFrame(yhat)\n",
    "test_X=DataFrame(test_X)\n",
    "print(yhat.shape,test_X.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f5b552e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "      <th>14</th>\n",
       "      <th>15</th>\n",
       "      <th>16</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.346096</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.413699</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.166667</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.625</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.313963</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.033333</td>\n",
       "      <td>0.416438</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.750</td>\n",
       "      <td>0.750000</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.338528</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.066667</td>\n",
       "      <td>0.419178</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.625</td>\n",
       "      <td>0.892857</td>\n",
       "      <td>0.807692</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.280864</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>0.421918</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.500</td>\n",
       "      <td>0.642857</td>\n",
       "      <td>0.769231</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.248005</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.133333</td>\n",
       "      <td>0.424658</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.125</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.807692</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>86</th>\n",
       "      <td>0.397426</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.649315</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.892857</td>\n",
       "      <td>0.923077</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87</th>\n",
       "      <td>0.395771</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>0.652055</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.892857</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>88</th>\n",
       "      <td>0.362826</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>0.654795</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.125</td>\n",
       "      <td>0.821429</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>0.316009</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.933333</td>\n",
       "      <td>0.657534</td>\n",
       "      <td>0.634615</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.846154</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>0.398690</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.966667</td>\n",
       "      <td>0.660274</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.875</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>91 rows × 17 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3         4         5         6    7   \\\n",
       "0   0.346096  0.454545  0.000000  0.413699  0.403846  0.166667  0.333333  1.0   \n",
       "1   0.313963  0.454545  0.033333  0.416438  0.403846  0.333333  0.333333  0.0   \n",
       "2   0.338528  0.454545  0.066667  0.419178  0.403846  0.500000  0.333333  0.0   \n",
       "3   0.280864  0.454545  0.100000  0.421918  0.403846  0.666667  0.333333  0.0   \n",
       "4   0.248005  0.454545  0.133333  0.424658  0.403846  0.833333  0.333333  0.0   \n",
       "..       ...       ...       ...       ...       ...       ...       ...  ...   \n",
       "86  0.397426  0.636364  0.833333  0.649315  0.634615  0.500000  0.666667  0.0   \n",
       "87  0.395771  0.636364  0.866667  0.652055  0.634615  0.666667  0.666667  0.0   \n",
       "88  0.362826  0.636364  0.900000  0.654795  0.634615  0.833333  0.666667  0.0   \n",
       "89  0.316009  0.636364  0.933333  0.657534  0.634615  1.000000  0.666667  0.0   \n",
       "90  0.398690  0.636364  0.966667  0.660274  0.653846  0.000000  0.666667  0.0   \n",
       "\n",
       "     8    9    10   11     12        13        14     15     16  \n",
       "0   0.0  0.0  0.0  0.0  0.625  0.785714  0.884615  0.875  0.875  \n",
       "1   0.0  0.0  0.0  0.0  0.750  0.750000  0.884615  0.875  0.875  \n",
       "2   0.0  0.0  0.0  0.0  0.625  0.892857  0.807692  0.875  0.875  \n",
       "3   0.0  0.0  0.0  0.0  0.500  0.642857  0.769231  0.875  0.875  \n",
       "4   0.0  0.0  0.0  1.0  0.125  0.785714  0.807692  0.875  0.875  \n",
       "..  ...  ...  ...  ...    ...       ...       ...    ...    ...  \n",
       "86  0.0  0.0  0.0  0.0  1.000  0.892857  0.923077  0.875  0.875  \n",
       "87  0.0  0.0  0.0  0.0  1.000  0.892857  0.884615  0.875  0.875  \n",
       "88  0.0  0.0  0.0  1.0  0.125  0.821429  0.884615  0.875  0.875  \n",
       "89  0.0  0.0  0.0  1.0  1.000  0.785714  0.846154  0.875  0.875  \n",
       "90  0.0  0.0  0.0  0.0  1.000  0.857143  0.884615  0.875  0.875  \n",
       "\n",
       "[91 rows x 17 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_X[0]=yhat\n",
    "test_X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "02cb65cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "inv_yhat = scaler.inverse_transform(test_X)\n",
    "inv_yhat = inv_yhat[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "887968dc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# invert scaling for actual\n",
    "test_y = test_y.reshape((len(test_y), 1))\n",
    "test_X[0]=test_y\n",
    "inv_y = scaler.inverse_transform(test_X)\n",
    "inv_y = inv_y[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "64783e5b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test Score: 12102.855\n"
     ]
    }
   ],
   "source": [
    "# calculate RMSE\n",
    "from math import sqrt\n",
    "#trainScore = sqrt(mean_squared_error(train_y[0], inv_yhat[0]))\n",
    "#print('Train Score: %.3f RMSE' % (trainScore))\n",
    "rmse2 = sqrt(mean_squared_error(inv_y, inv_yhat))\n",
    "print('Test Score: %.3f' % rmse2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "1c22321c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 82790.85 ,  88042.79 ,  75160.766,  63999.84 ,  62774.945,\n",
       "        81796.16 ,  81080.125,  85013.88 ,  85015.64 ,  84235.695,\n",
       "        70144.47 ,  58336.79 ,  53617.95 ,  84360.36 ,  87328.97 ,\n",
       "        88508.48 ,  88677.445,  82998.22 ,  71482.74 ,  94735.31 ,\n",
       "        79579.64 ,  79416.53 ,  75348.62 ,  82377.17 ,  79500.516,\n",
       "        74537.81 ,  94243.77 ,  93299.08 ,  94739.125,  99263.59 ,\n",
       "        97400.62 ,  93678.83 ,  81484.61 , 102836.24 , 102864.92 ,\n",
       "       102939.04 ,  99542.9  , 100487.72 ,  95529.34 ,  86270.75 ,\n",
       "       109148.63 , 107847.375, 109542.24 , 108817.83 , 106600.19 ,\n",
       "        93822.86 ,  86139.03 ,  99284.72 ,  90579.445,  93160.766,\n",
       "        99643.69 , 104267.734, 100232.72 ,  89840.08 , 110728.016,\n",
       "       114799.42 , 112806.14 , 110454.18 , 107842.84 , 100936.86 ,\n",
       "        88609.555, 100878.89 , 106166.53 , 101575.76 ,  95802.35 ,\n",
       "        99406.62 ,  95020.54 ,  85078.47 , 101296.94 ,  93614.64 ,\n",
       "        92781.04 , 103257.61 , 102381.69 ,  91059.65 ,  82678.01 ,\n",
       "       102673.03 , 103842.05 , 105986.12 , 101694.53 , 103325.3  ,\n",
       "        96453.06 ,  83928.7  , 105291.89 , 106634.945, 104968.35 ,\n",
       "       104509.58 , 104728.875,  93855.14 ,  84127.164, 102851.27 ,\n",
       "        96396.26 ], dtype=float32)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "227db62c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "91 91\n"
     ]
    }
   ],
   "source": [
    "print(len(inv_y),len(inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a388d8c6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 82592.63 ,  75120.67 ,  80832.74 ,  67423.86 ,  59783.168,\n",
       "        57909.867,  76516.75 ,  77955.34 ,  77713.45 ,  79399.49 ,\n",
       "        75653.945,  64565.375,  52720.707,  55392.71 ,  80550.836,\n",
       "        82330.4  ,  82553.69 ,  82315.68 ,  76996.34 ,  65557.45 ,\n",
       "        89314.11 ,  74308.08 ,  73352.85 ,  69588.805,  73623.99 ,\n",
       "        74353.875,  68448.195,  88586.84 ,  87160.22 ,  84821.09 ,\n",
       "        90352.68 ,  89496.67 ,  84960.86 ,  74145.01 ,  96740.445,\n",
       "        92842.06 ,  92162.26 ,  92183.48 ,  93098.19 ,  87873.42 ,\n",
       "        79218.41 , 102998.81 , 101579.36 , 102627.81 , 101940.66 ,\n",
       "        96318.68 ,  85247.586,  77869.56 ,  92563.11 ,  83403.52 ,\n",
       "        85542.27 ,  93067.29 ,  97768.09 ,  93748.375,  82923.82 ,\n",
       "       105832.53 , 108936.73 , 104462.59 , 102686.64 ,  98849.484,\n",
       "        88532.75 ,  78517.5  ,  90348.97 ,  94509.67 ,  90899.23 ,\n",
       "        84494.86 ,  88391.19 ,  85120.86 ,  74543.26 ,  92020.46 ,\n",
       "        83380.33 ,  84821.71 ,  93387.19 ,  90744.98 ,  82507.266,\n",
       "        74276.64 ,  96313.04 ,  97214.55 ,  98994.87 ,  93981.78 ,\n",
       "        95395.81 ,  89353.31 ,  77146.17 , 100005.96 , 100680.914,\n",
       "        97629.04 ,  94528.7  ,  94143.86 ,  86482.87 ,  75596.484,\n",
       "        94822.625], dtype=float32)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_yhat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "3314d790",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MAPE: 0.09186317\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sklearn import metrics\n",
    "def mape(y_true, y_pred):\n",
    "    return np.mean(np.abs((y_pred - y_true) / y_true))\n",
    "print('MAPE:',mape(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "1f9a9a20",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R2-score: 0.06820206093321313\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import r2_score\n",
    "print('R2-score:',r2_score(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "27b1d1c5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x2154f808af0>]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAD4CAYAAAAZ1BptAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8+yak3AAAACXBIWXMAAAsTAAALEwEAmpwYAABA1UlEQVR4nO2deZgc1Xmv30/7hvbRSEhoAYRYhMQiJBGM2UEsseRcbOOHBBlj5MT4Ggc7McbJxcv1jbnxEpPY5GI2QRIb7BiQMYsVGZvFgDWYRQsIhISQZKF1tI1A67l/fHXSNT1VvZ7qmZ753ueZp6dPV1XX9FSfX33rEecchmEYhpFEt/Y+AcMwDKPjYiJhGIZhpGIiYRiGYaRiImEYhmGkYiJhGIZhpNKjvU8gNMOHD3fjx49v79MwDMOoK1588cUtzrmG/PFOJxLjx4+nqampvU/DMAyjrhCRNUnj5m4yDMMwUikqEiJyl4hsEpGlsbGPiMgyETkkItPytv+yiKwUkRUiclFsfFY0tlJEboyNTxCRF6Lx+0WkVzTeO3q+Mnp9fJC/2DAMwyiZUiyJe4BZeWNLgT8DnooPisjxwBXACdE+PxSR7iLSHfgBcDFwPPDxaFuAW4DvOeeOBpqBa6Lxa4DmaPx70XaGYRhGDSkqEs65p4BteWOvOedWJGw+G/iJc26vc241sBKYHv2sdM6tcs7tA34CzBYRAc4FfhbtPx+YEzvW/Oj3nwHnRdsbhmEYNSJ0TGI0sDb2fF00ljY+DNjunDuQN97qWNHrO6LtDcMwjBrRKQLXIjJPRJpEpGnz5s3tfTqGYRidhtAisR44IvZ8TDSWNr4VGCwiPfLGWx0ren1QtH0bnHO3O+emOeemNTS0SfM1DMMwKiS0SCwArogykyYAE4HfA4uBiVEmUy80uL3AaZ/yJ4HLo/3nAg/HjjU3+v1y4NfO+pobRjgOHIAf/Qjee6+9z8TowJSSAvtj4DlgkoisE5FrROTDIrIOOB34pYg8AeCcWwY8ACwHHgeuc84djGIKnwWeAF4DHoi2BfgScIOIrERjDndG43cCw6LxG4D/Tps1DCMACxbAvHlw//3tfSZGB6ZoxbVz7uMpLz2Ysv03gW8mjD8KPJowvgrNfsoffx/4SLHzMwyjQh6OjPYXXoBPfKJdT8XouHSKwLVhGGVy4AA88oj+/sIL7XsuRofGRMIwuiLPPgvbtsFxx8Grr8KePe19RkYHxUTCMLoiDz0EvXvDV74CBw/CH/7Q3mdkdFBMJAyjq+GcxiPOO09/wFxORiomEobR1Vi6FFavhtmzYeRIGDfORMJIxUTCMLoaDz8MIvChD+nzGTPg979v33MyOiwmEobR1XjoIRWGkSP1+YwZsGYNbNzYrqdldExMJAyjK7FuHbz4orqaPDNm6KO5nIwETCQMoyuxYIE+zpmTGzvlFOjRw0TCSMREwjC6Eq+8AsOHw7HH5sb69oUpU0wkjERMJAyjK7F7Nwwc2HZ8xgxYvBgOHar9ORkdGhMJw+hK7NkD/fu3HZ8xA3buhNdfr/05GR0aEwnD6Eq0tKSLBJjLyWiDiYRhdCVaWqBfv7bjxxwDgwZpTyfDiGEiYRhdiTRLols3TYv9j/+A9evbvm50WUwkDKMrkRaTAPja17TZ38031/acjA6NiYRhdCXSLAmA8ePhuuvg7rth+fKanpbRcTGRMIyuRFpMwnPTTTBgAHz5y7U7J6NDYyJhGOVy223wu9+191lURiFLArTQ7sYbtTL7mWdqd15Gh8VEwjDK5Utfgg9/GLZsaT3uHDz3HLz/fvucVzH279dlSwuJBMD118Phh8Pf/q3+TUaXxkTCMMrBOQ3+btqk/vs4X/sa/MmfaM1BR/Tpt7ToYzGR6NdPhfC556y4zjCRMIyy2LdPM4DGjIEHHoD779fxf/kXFYlLL4V334VTT4Uf/rBj3Yl7kSgUk/Bccok+/va32Z2PUReYSBhGOezZo4+f/zxMnw6f+Qzceit87nNaZ/DQQ/Dqq3DOOWppdKQAsD/3YpYEwFFHwejR8JvfZHpKRsfHRMIwysFPtAMHwvz5+vz66+HMM+HHP9aW242N8MtfwgUX6CpwHYVS3U2gK9edfbaKREeyhoyaYyJhGOUQd9kceyz867/Cn/6pZgP17ZvbTkRjE2++CXv3ts+55lOOSICKxMaNFpfo4phIGEY5eEvC+/XnzlWBGDSo7baTJ2v8YsWK2p1fIcqJSYCKBJjLqYtjImEY5VCOX3/yZH1cujS78ymHcs4dNC4xZoyJRBasWAGPPtreZ1ESRUVCRO4SkU0isjQ2NlREForIm9HjkGhcRORWEVkpIq+KyCmxfeZG278pInNj46eKyJJon1tFRAq9h2G0K+XcjU+cqDGKjiIS5bqbLC4RHufgn/8ZTjpJM+HqoJliKZbEPcCsvLEbgUXOuYnAoug5wMXAxOhnHnAb6IQP3AzMAKYDN8cm/duAa2P7zSryHobRfpRzN96rF0yaVL8iASoSmzZZXCIEf/wjXHyxZsKdeqqOdaTEhhSKioRz7ilgW97wbGB+9Pt8YE5s/F6nPA8MFpFRwEXAQufcNudcM7AQmBW9NtA597xzzgH35h0r6T0Mo/3Ij0kUY/LkjicSpZ47WFwiJLNnw1NPaf3M00/rGh4PPtjeZ1WUSmMSjc65DdHv7wKN0e+jgbWx7dZFY4XG1yWMF3qPNojIPBFpEpGmzZs3V/DnGEaJlDvRTp4Mq1fn9mtPyo1JABx5pMUlQvHWW/DJT8Jf/ZW68ubM0c+1ubm9z6wgVQeuIwsgU4dlsfdwzt3unJvmnJvW0NCQ5akYXZ1yJ1ofvO4IbTpaWjRG0qtX6ftYXCIcLS3aYdfz4Q9rL61f/rL9zqkEKhWJjZGriOhxUzS+Hjgitt2YaKzQ+JiE8ULvYRjtR7nuphNO0MeO4HIq1gE2DYtLaCZSNZ1/DxzQli7xz3/6dBg1qsO7nCoViQWAz1CaCzwcG78qynKaCeyIXEZPABeKyJAoYH0h8ET02k4RmRllNV2Vd6yk9zCM9qOlRe+ue/cubfsjj4Q+fTqOSJQTj/D4uMRTTwU9nbph/Xr4H/8DvvjFyo+R5Kb0S8Y+/ji8915155ghpaTA/hh4DpgkIutE5BrgW8AFIvImcH70HOBRYBWwEvgR8BkA59w24BvA4ujn69EY0TZ3RPu8BTwWjae9h2G0H375T83ULk737nD88R1DJAotXVqICRP073jnnfDnVA989ava/v2VV7Q4shLS3JQf/rC+tnBhVaeYJT2KbeCc+3jKS+clbOuA6xK2xTl3F3BXwngTMDlhfGvSexhGu7JnT/l345Mnw6JF2ZxPOVTqburWTftRvftu+HPq6CxfDnfdBePGwZo12mbl2GPLP05a+vHZZ2u1/oMPwoc+VPXpZoFVXBtGOVTispk8WV0WWWax7NhR/PiVigTAyJFdUyRuukk/szvv1OcvvVTZcdJEolcvuOwy+MUvNG7RATGRMIxyqMRl44PXy5aFPx/PlVeqf7sQlcYkoGuKxLPParHbl74EH/ygTujVikTS5z9nDmzd2mGXizWRMIxyqNSSgOziEocOaXHW734Hu3enb1dpTAJUJDZurGzfesQ5FYdRo3TtkJ499f8Y2pIAmDVLEyEeeqjSs80UEwnDKIdKYhJHHAGHHZadSKxcCTt3alD1uefSt6vW3bRxowpSZ+fQIV0j5NlnNWjtP7OTT1aRqKRepFB9zYABcP75arV0wFoUEwmj87F4MdxzTzbHruRuXETvQrNyNy1enPv96afTt6tGJBob1We+Lb9DTyfjwAG4+mptwnfDDXDttbnXTj5Z3ULr1qXvn0axvllz5sDbb+uqhh0MEwmj8/Gv/wrz5uXu3kJSqV9/8mRYsiSbO8WmJj2nqVOLi0Q1MQno3HGJvXvhIx+Be++Fb3wDvv3t1qnOJ5+sj5W4nIqJxJ/+qb5XB2z4ZyJhdD5274b9+wu7XiqlEncTaK3E1q2wZUv4c1q8WCewc86B559PXgnPuepjEtC5ReIf/1HjAt//Pvzd37WthZkyRceqEYm0a6exEWbONJEwjJrgv5C//W34Y1c60Y6Jus9s2FB4u3I5cEAnrWnTdJ3t99+HF19su92+fRqzMJFIZ80aDVR/7nPJrw8YoJ1bKxGJUnp+zZkDf/hDhytaNJEwOh9ZikSlLpsRI/RxU+AWZK+/rhPQaafBBz6gY0kup0rWkojTFUSilJiND15Xcuzu3Qs3V/QpzAsWlH/8DDGRMDoffkJ84QW9sw6Fd9l0JJHwQetp0/Q9jj02WSTKbUyYz2GHQd++JhInn6x3+lu36vPmZq2afuKJ0o5dqJ3LpEn6/+tgLicTCaPz4Vsy792rQhEKLziV3I03RsuhhBaJpiYYOFCXSgV1OT3zTNseQ9VaEiKdv1Yiv5V3Ej54/fLL+nj99WqxPvJI8WOXItCzZ2tb9u3bi29bI0wkjM5HSwuce65ObCFdTpWs7OYZPFjXcshCJE49VfsrgYrEjh1tazKqFQno/FXXu3eXZkmAxg4efBDuu0+vs9deK7xfqbGsOXM0zvTooyWd8n/z8sswdiw8+WR5+5WAiYTR+WhpgdGjNSU0pEhUsrKbR0TdQSHvxPft08lh2rTc2Jln6mO+y6k9RGLRIvjsZztkgVgipbibhg/X4siFC+HTn1bRuOKK4mttlFqjMn26fs7f+pbGJkrt59TcDGvXlt6duAxMJIzOh/9CnnWWtqpISgmthGr9+iNGhLUkli5VoYiLxLhxOonli0S15w7ld4K97Tb4wQ902c56oNSJ/OSTVSR27NCaiilTtIHjzp3VH7tbN/je9zRVevZsGD9e6zWKsWuXPh52WPFty8REwuhcHDqkC7j0768Bxfffb12RXA3VuJtAJ9mQItHUpI9xkRBRa+Lpp1vfwYeyJLZs0RqUYjinbS0A/uu/Kn/PWlKOSIAW3E2enGsdXsiaKCcr7oorNDj+4IO6aNXf/E1xd5aJhGGUiF/hq3//nOsllMupGncThLckFi+GoUN1UaA4Z56p9Rhr1uTGQokElPY3rF6dszo6m0h86lNaePeFL+jz447Tx0ITebktUXr00PjEP/6jPl+1qvD2vrGjiYRhFCE+GQ4bBieeGF4kqnE3bdwYzkff1KRWRL4f+sgj9THeYyikSJTicvJtr6dNg1//uvIV3Sph3z6dYH//+9L3OXRI/7/FsptACyO/+EWtewA46ijtElvIkqi0CHP8eH1cvbrwdt6SKOX8y8REwuhc5E+GPi5RzEWydi1cfnkutbHQsasRiffeyx2nGt57T2MScVdT/H2g9R1/iJhEOSLx7LO64tr112tQtdIW25WwcqXWGvi78FJ47z0V70om8h49NAU5pCXhGTFC61Pefrvwdl4kqrkJSMFEwuhc5E/kZ5+tY//yL+l38G+9pS6a//xP+Pd/Tz92te6mkLUSK1dq5suJJ6a/TzyTKqQlUUqG1rPPwumnwwUX6PNaupzWrtXHX/yi9HqDaj+f447LRiRE1JooRSQGDMilQgfERMLoXOR/2S+5RCeqG27QRec3b269/fLlKhC7d2tW0CuvpB87hLsJCovE2rVw0km5iS4N737wrqU4DQ06ueSLRK9eetdbKV58ilkSzc3aFv2MM3SfE0+srUh4N9vevfDTn5a2T7UiceyxerOxb1/b15yrrgNvqSKRQTwCTCSMzkb+l71vX3j8cfjud+Gxx3TC+uIX4a//Gq67Tt1Rzmnc4vzzC4tECHcTFL4Tf+klPYdiGVl+0vA+6zg9emg8Jl8kqnVF9OmjRYHFRMJ33z3jDH284AKNUfikgqzx9QITJ2qKaimEsCQOHlQLL5/9+6trrmgiYRgBSfqyd+umorB4sRbZ/fCHcNdd8MADWlfw9NO6DvXUqXqXnzYJhshugsKWRHOzPq5fX/hYq1erWDU0pL9XfkyimniEp5RaiWee0aDu9On6/Pzz9a6+2jWc335bu7S+8Ubh7dauVdfYJz6h71ks6AthRAKSXU7VHnv8eO0V5eMOSezenUnQGkwkjM5GoS/klCnaRnvPHi2E2rxZM4SOPlpfnzpVH9OsiZYWvUvv2bOyc/MTeiiRmDAhvcK2sTG8JQGlVV0/+yycckru/c48Uz+zal1Or7+u7+3rQ9JYu1Zdh1deqc//7d+KH9tfN5VOtJMm6WNWIgGFrQmzJAyjRKr5QnqRSMtwqvZuvE8fzfgpJBI+0FqqSKTRXiKxb5+mnnpXE+jEe/rp1YuEr2guFq/xIjFunLoT77uveNqxrzOo9DPq3197JxUSiWpiEmAiYRhBqEYkhgzRL3qaJVHNym6eYv2bSrEknNMJIyke4WkvkXjpJa1yj4sEqMvppZeqW5nPi0ShNaadU5Hwizz9xV/Am28Wr5kIkf113HHJtRLVuilNJAwjINV+IadOLexuqtavX6zquhSRaG7WCbOQJTFihE4cPlgcKiYxcqQeN239cN+KI0kkfIJApZRiSezYof+nI47Q55dfrhZcsQB2SJE4dCjssRsa9H9XjyIhIteLyFIRWSYin4/GhorIQhF5M3ocEo2LiNwqIitF5FUROSV2nLnR9m+KyNzY+KkisiTa51aRDFocGh2bcgvPWlo0UN27d2XvN3UqrFiRvFhRiIm2HJFIc5H4QGwxdxPk3iukJQHp1tAzz+h5jRrVenzKFH1cvrzy9y7FkvAC4kVi0CA477zi4hRKJPbsaStiIdbyKJbh1BED1yIyGbgWmA5MBS4TkaOBG4FFzrmJwKLoOcDFwMToZx5wW3ScocDNwIzoWDd7YYm2uTa236xKz9eoQzZs0El17tzSmspBaSuAFWLqVE1XXLas7Wsh3E3Fmvz5mERLS3o2Szki4Sfz0CKR5nJavFjjD/n0768Td7HMpEKUYkn417y7CbRtxpo1heMSIUTCN/rLj0uEOHYhkTh0SN+jA1oSxwEvOOf2OOcOAL8F/gyYDcyPtpkPzIl+nw3c65TngcEiMgq4CFjonNvmnGsGFgKzotcGOueed8454N7YsYyuQFOTTsz33guXXVY4BdBTrUuoUIZTKHfTli3pvYyam3MCl+ZyKlQjEX8fqK1IHDqkwj5uXPK+xxyjVlql7Nihj5s2pbd/91aGtyRA40y7d+f2T8JnrhVag7oYPg02Py5RbeAa9H+dlsqbYXM/qE4klgJnisgwEekHXAIcATQ65zZE27wLRLc0jAbitwDrorFC4+sSxtsgIvNEpElEmjbnV9Qa9cuSJfr4T/+kC9icdVbx9MtqJ8OjjtL9k0QiVODaufQAbnOzngOki8Tq1VrUNnhw+vvku5tC1klA8v9h+3YVv7TajUmT1JKotMFhfL2GtM9m7Vp1N8bdXWPH5l5Lw69KV41Hu6FBixjzLYlq42SgItHcnCx0GbYJhypEwjn3GnAL8CvgceBl4GDeNg7IfFkq59ztzrlpzrlpDWkXqFEejz5avMoza5Yu1bvS66/XPjxvvAFXX114n2pFols3rcpOE4kQlgSku5yam3WNAigsEoVcTdDa3eTbQoSwJHzLjySR8MKX9h085phcfUolxEUiLS6xdi0cfnjr9iNeJN55J/3YoT6fpB5OodxN0Lr9u6ejigSAc+5O59ypzrkPAs3AG8DGyFVE9Oi/DetRS8MzJhorND4mYdyoBR/7mK6Q1Z4sWZKbMC++WAXi6acLt50O8WX3GU75d7yh3E2QLBJ792o20gkn6PNCIlHI1QSa0TNwoIrE++9X3uE0nx49VASSRMJP/oUsCajc5bRzZ3GrIJ7+6vGup1qIxJFHtp3IQ7mbIPnGzbubOlrgGkBERkSPY9F4xH8ACwCfoTQXeDj6fQFwVZTlNBPYEbmlngAuFJEhUcD6QuCJ6LWdIjIzymq6KnYsI0sOHdILb9u29juHffvUtxvvcjp9un7hsui2Geekk9R1kj+phApcQ7JI+KD14YdrzUaSSPgaiWKWBORqMkK4O+Kk1UoUE4ljjtHHSoPXO3fC8cfr72mWxLp1reMRoOfbs2dtRKKhoa0rsaVF37/SSn0oLBId2ZIA/lNElgO/AK5zzm0HvgVcICJvAudHzwEeBVYBK4EfAZ8BcM5tA74BLI5+vh6NEW1zR7TPW8BjVZ6vUQo+/dOnY4Zm5UrNBPnDH9K3eeMNbYXtLQnI9QJ64YX0/UJZEtDW5RTS3ZSUQuo/78GDVSiSRMJbBqWIhM+kCnEnG6eYSAwfnrzfuHEaGM63JA4e1IK3YuzcqZ/L4MHJloQvpMsXiW7d1LqohUgMH67XSbyOJMTNxfDheoyk4HVHFgnn3JnOueOdc1Odc4uisa3OufOccxOdc+f7CT/KarrOOXeUc+5E51xT7Dh3OeeOjn7ujo03OecmR/t8NopxGFnjJ5VSe/GXy9KlOlFcdVV6lsrSpfoYtyQmTtQJolD1bIgv+4knqt89LhIHD+rkXO1EO3iwumySLAkvEkOGaCPCP/6x7TalpL96fNV1CJ94nEotie7dtU9WviUxf77eNBQTip071YU2ZkyyJbFtm7rr8t1NoG6qQiIRqs7AC+TWrbmxENdkoVqJjiwSRifF3wVlJRLeh7psGXz1q8nbLFmik4r3Y4PeEZ52WmGRCHHXNmCAZhjFRSK+dnY1dOumk2ghd5MXiSRLwotEsZgEZCcSo0apSOTfs23Zou/Rt2/6vpMmtbUkfvUrdXH+4hfp+x06pJPhwIFqKSRZEvmFdHGKiURISwJau5xCHdtEwugweJHIyt3kReLSS+H//t9k99HSpTqh5FdOT5+uApLWFiLUF3Ly5NaxjxDLf3rSCuryLYl331WXW5xSaiQ8I0boHa1PmwxpSezb1/b62Lw53YrwHHOMLs7j/654q45f/jJ9v5YW3baQJZFUI+EZO1ZFN//zjB8/S5EIcd0UE4mOGLg2OilZu5u8SPy//6eT4dy5bRekiWc2xZkxQ10/afGMUF/2sWNb362G9OunNfmLxyRGj9a75/ztVq/W/Uv5G32Q3GfbhIpJ+BqEDRtaj5ciEpMmafW8P6c33lAxHD0annoqveDNp796SyKpoK6YJXHwYNtz9oQMXENrkQhh3YKKxPbtbb+X1XawLYKJhNEWf9e8Z0/ycozV4i/qUaN08Z8VK+D//J/Wr69enbx+82mn6WOSy2nfPr1TDDEZHnGE3qH5ySlkhlBa/6Z8dxO0dTmVkv7q8SKxapU+hrQkoG1colRLAnIuJ29FfO1r+r9buDB5v7hI+JhD/mezdq3Ge/zfHadYrURoSyJeCxLS3QRtU2wzXN8aTCSMJOJN9bKwJnbt0i9Nt27aHfTP/gxuuy2XVeX7JiVZEiNH6hc+SSRC+t79ROTvTkO6m9JEorlZj9+rV2GRKCVo7d/H7wNhYxKQbEmkZTZ5fIzJB69/+1v9n86dq+KY5nLKtySgbVzCF9J17952/0L1FYcOhbvbHzxYr+usYhLQNsMpww6wYCJhJBH392chEvmZJJ/5jPrO/aL1SZlNcWbMSI5jZCES3s8d0t3U2KifcX6H2+bmXKuNJJE4eFDvhEsViawtiXyR2LKluCUxbJiKwYoVuXjEWWepBXDRRVrpn99qG3JuqLglkR+XSKqR8BQqqPPXewiffvfuMHRotiKRH5cwkTBqTlwksghe54vEueeqG+K22/T5kiU6GadNhtOn6xcl/248pEjk362GdjdB23hDc7NOoKCTbc+erUXCB17LFQl/5xkqJnHYYXqsuLuppUXjSsVEQiTXw+mtt/RvOussfe2yy/R/mrQ8qbckBg1qa+V5kmok4uc8ZEiySITO/ho+PJvA9bBhmjmW/3d7d1NGmEgYbcna3bR7d+s7HxH4y7+E557TtNOlS7U1RZqP1RfVLV7cejzkl/3ww/W8srAk0lpzbN+eEwnfpC5eK1FO+ivoZ9ynT06MQomEiFoTcUuiWI1EnGOOUZHw8Yizz9bHWbP0705yOcXdTQMGqMUVtySc0+dJNRKetDTYrEUilCtLJDkzLv/7FBgTCaMtWVsSSXc+c+fqhHbbbemZTZ5TT9XJJD8uEfLL3rOnToRZxSSg7Zc9bklA21qJcgrpQCcV/159+iT76ivF10p4yhGJSZN0Qn/0UT0/vw7DsGEwc2ZxkYC2tRKbN2u2U5ol4fephUjEW3OEbK4IyZlx5m4yak6tYxKgftyPf1yrbzdtKiwS/fvr6/lxidBf9ng+fhbupiSRiLf/zm/N0dSk4uWDsKXgXU6h0yNHjUq2JIoFriGX4bRgAXzwg63bc192Gbz4Ytt4hxcJPxnm10oUqpHw1NKS8J9HyOaKkGxJmEgYNaelJffFrZVIAPzVX+UynNKC1p7p09WSiFf9hv6yx+9Ws3A35U+EhSyJ5ma45x644orylmb1IhHK1eTJdzcVaxMex4vEgQO5eITn0kv18dFHW4/v3Kn/V28N5VsSSSvS5TN2rH6O+YtXZeVu8lYEhPv8fRV9HBMJo+bs2aNmfa9e2QWuky7q005TVxIUtiT8ts3NrXPGQ3c7TbIkQnzZ+/TRSTaepXLwoE6E+SKxa5f+3H67Tjhf+EJ575WlJbFjR64Ishx308SJud/zReLEEzU4m9/p1/dt8owZo+/pbyr8Z1nMkoC2gd/QrbaHD1cB3Lkz/DU5YoT+3fEMMAtcGzXHB9oGD66tJQHwD/8An/pULs0yDT8ZxO9ms7Akdu3SyXDPHr2DD+XXnzChdb67T/HMFwnQCfDWW+G883IdakvFWy2hRSK/oG7zZnWFxSfyNPr21Ql76NDc2hkeH5zNL9TLFwn//1+/Xj+773xHF/zxf28SaQV1WVgSoNZE6GM3NuoNhW/jf/CgXpsZWhI9im9idDl8yl737uEtCecK3/lccIH+FCO+8pontGkfz8cPlcbomTABfve73PN4Sw6PF4nvfleznO64o/z3ydKSAJ3MJ0zIVVuXuvznRz6itRFJGWxJLpUkSwLUKrjlFhWLZ58tXHXcHiLhbypCWhKgn8/w4blzN5Ewaoq3JPr0CW9J+NYZ1ZrHhUQipLsJdCIKlcboOfJI+MlPtI9Rz56tm/t5vEjMn6+L7cyaVf77ZBmTgJwlV0pLjjjf/nbhY/sCQE+aJXHXXXDfffA3f6OZUYUYNUon7Xx3UxbZTaCfiZ+8Q1oSoMHrE07IvAMsmLvJSMLfNQ8ZEl4kQvl//RcxnunR0hLWJeQnonXrwiw4FGfCBPUr+wkr3rfJ40XCObjhhtLv0uNkbUl4kdiypbTMplIoxd3kBfy++zSF9utfL37cHj30M62lJREylgVtb45MJIx2wU+IgweHdzd5kaj2ou7VSyfUfEsi5GQYL6gL7W468kh99HGJJEvC/w9GjIArr6zsfbKKSTQ0qGsnHpMox5IoRGOjTrDxtt75ItG/v35W3bpp1lefPqUdOykNtqVFBaRXr6pPHcg2JpGfPp1xm3Awd5ORxJ49eqFnEbgOeVHn+65Di0S8oC60u8kXxK1apQHppJgEwPXXa/FZqZNgPllZEt2764RVqbupECNHqvW0ZUvOrbVjh7bkiPMXf6HW3owZpR977Fh4/vnWY6FWpfMMGKCCE+9lFerzHzpUP/saWhImEkZb4u6m5mb9wlbi6kgiZLph1iIBuTTYPXvCTiRjxujdayFLAtJX7iuVoUPVBZc/wYbAV13v26eTeEhLAvR/6wUj35IA+P73yz/22LHaSPLQoVyQO/R1I5KrlQhtSfiVDf11H8oyL4CJhOfv/17bAaQtZlNvrF2r2R7PPKOZMaefrjnpp5yik1Mh4u6mgwf1Qg81QYYUiREj4NVXc8+zEIkjjtCc/Z49C6dXlkv37jBuXC5Au327vkfoAHO3blqY5ltfhMQX1JVTSFcKXiTefVdTfvfs0Um9lPTaYowdq8kCGzfm4ipZXDdeJELHJKB11bVZEjXmlVdy2Sb1yqFD2trgscf0ef/++mV+8EF9PnAgPPxwrqlaEt614u9qt28PLxIhLupaWRILF+p7hT52vFbCV1uHstjinHtu+GOCTrIvv5wTiVCBa+9i8v/b/L5N1eCTEdasyVYkGhrUBRc6LRtaX/cWuK4h+dkm9cpPf6oC8YUvaA+c7dth5Uq947v/fq1QzW95kI93N3n/eMjgdWh30/btuWUsQ8cNIFdQ9+674e/yjzyytUjkxyM6OiNH6h2tn7CycDdBWJFIqrrO0pJoaQnfXDG+aFUNAtcmEh4fSMxf9ame2LcPvvIVbW1wyy2tXUsjR8JHP6r59nEXTT4HDuhxfMU1hA1ehw5cQ+4Lk5UlASpuoUXCF6Ht3t22b1M9MGqUuiN9C41QIjFggFZl+8ypLEQinuGUtUiEPra3JHxhKmS2vjWYSOToDCLxox/pQi7f+lb6ncvUqYVFwvfi8YFr6LiWRH46YOg0VWjdMC4LdxPoNRdfS6Je8G4hfz2FEgnfmiMLS2LQIHXNxEUidHYTqEg0N+u5h74mGxv1e9rSkjv3jNa3BhOJHGPG6MRaryKxa5cuJn/22XDxxenbTZmirqf4Qu1x4j7ULCyJ3bt1Egi1DCjkJpOsAteeLNxNoMHrerUkQNf/ENFMqlCMHJmNSIi0rZXIypLwCyGFPna8NUfGHWDBRCJHjx568SSJxN13F/fjtzff+Y5O/LfcUjj4OWWKPqZZE/GulfHAdSh279Zjh7jzqYVI+II6yMbdBHrN1WNMwovE0qW6YFBIv3u86jqkSIB+z2sRkwANkGfhboL6EAkR+WsRWSYiS0XkxyLSR0QmiMgLIrJSRO4XkV7Rtr2j5yuj18fHjvPlaHyFiFwUG58Vja0UkRurOdeSyO/M6fnyl+Gf/znzt6+YLVu0F87ll+eW9kzDdxFNE4m4JeFz60O7m0KZ9vE7qkOH1AQP/YX0BXUQ/tjDhulnsWpVfbubfPFlSLJyN0FtLAnvelu7NjtLYtOmzNuEQxUiISKjgc8B05xzk4HuwBXALcD3nHNHA83ANdEu1wDN0fj3ou0QkeOj/U4AZgE/FJHuItId+AFwMXA88PFo2+wYP76tSGzdqherb83bEVmyRC/0T3+6+LYNDfrlLmZJ9Oun1tVhh4UPXIe6qPv315+NG8P37Y/j4xKhLQkRdTm9+qoGgOtNJPr1y03coeIRnpEjc605shCJzZv1piKrmwsvmgcOdG1LAq2z6CsiPYB+wAbgXOBn0evzgTnR77Oj50SvnyciEo3/xDm31zm3GlgJTI9+VjrnVjnn9gE/ibbNjgkTWk84AMuW6WNHFgl/vqVW1U6ZUpq7CcL3bwodJPSFRaErW+P4uERokQC95l56SX+vN5GAnDURWiQaG3OtOXbs0GynUPVL8TTYrG4u4pZV6Osm3twybQGvgFQsEs659cC3gXdQcdgBvAhsd875zlzrgKiVJaOBtdG+B6Lth8XH8/ZJG2+DiMwTkSYRadqcFpAtBe8jjq8Y5kVi69bKj5s1/kLv27e07adM0b8r3kDNk1/8E7p/U+iL2rslshQJb0lkcewjj8zdKddbTAJycYksRAI0LpHUkqMavOi/8074Vek8w4blfg993cSbW3ZkS0JEhqB39hOAw4H+qLuo5jjnbnfOTXPOTWuo5mJNSoP1IrF9u7oEQvPee3Djjdo6o1LKLf2fOlUL0N54o/ixfP+mUGRhSWQtEllbEh6zJNoed+PG8CIRr5XI6rrp0yd3nWdxTfrrviOLBHA+sNo5t9k5tx/4OXAGMDhyPwGMAaKV3FkPHAEQvT4I2Bofz9snbTw7kiyJpUv10bncEpMh+c53NCPp7rsrP0a8tqEUCmU4JbmbOmpMAjSIl3VMwk8qWXwZ610kvCWRReAashGJ0aM1HpSlSEDuM8ni2L7quiMHrlE300wR6RfFFs4DlgNPApdH28wFHo5+XxA9J3r91845F41fEWU/TQAmAr8HFgMTo2ypXmhwe0EV51uckSP1DiDfkvD/5NAup/XrdU1ngF//uvLjlGtJHHus+neTRCLf3RR64aEsLIktW3Iumyy+kLNn6+pwJ50U/ti+VgLqWyTqyd3Uq5eed9Yi4T+TLCzQxkatd8p4fWuoLibxAhqA/gOwJDrW7cCXgBtEZCUac7gz2uVOYFg0fgNwY3ScZcADqMA8DlznnDsYxS0+CzwBvAY8EG2bHSKtM5w2bdIJ6PTT9Xno4PVNN2lcYM4cXe/4/fcrO065MYlevXTR+FdeST9WloHr0DEJ53IpjVl8IXv3hquuyqb53vjxud/rMSaRlbvJt+bIwpKAXBpsvVoSjY05j0fGIlFVF1jn3M3AzXnDq9DMpPxt3wc+knKcbwLfTBh/FKhtFVu8VsLHIz74Qfiv/worEosXw733wpe+BGecAQ89pIuhFOrOmsaePZquWk72x5Qp8JvfJB8LcoIzeLCatAcOFG8xXgznsrEkINdyO8MeNpnQr1+uujj0RFgLZs7UG44TTwx7XJHc55KVSLz0Uv2KxIgR2rEaOq4l0WlJEokzz9THatxNd9+tBXlLlmhu9uc/r//om25SEerWrXKXUyXrL0+Zoi0D8oXPd630FdHeBRIiHrNvn4pN6JgE1K9IgF5zgwdn2n8nM445BpYvz1kUIfFV11laEll2Uc3akvB0ZEuiUzJhgvrgt29XkRg0KHeXVKkl8fjj8MlP5p4PGqST7o9+lLv4p02DJ5+s7PjvvVeZSICK1lln5cbz223H+zfF0/oqIYsvZL1bEqDZZpW6GjszjY3asDIrkdi7N+eyqUdLwtOBA9edk3ga7LJlcMIJOlGKVGZJ7NgB116rJvmKFbpo+5w5MHcuXH11brtzz1V3kzd/y6ESS8K358iPS+R3Ug3ZvymLnHQvEt76q0eR+Pa34Ve/au+z6HiMHKm9j/bvz0YkAF5/XR+zFImsAtceczfVmHyRmDxZG5cNHlyZJXHDDVoDcc89aprPnau/33NP64Zo55yjrphnnin/PfbsKT1o7Wls1GBjfoZTvuCEXHgoi/V4Bw3SQPzmzequ6d073LFrRf/+4VNIOwONjTnrM7RI+NoXvxZGltlNde5uMpHIx4vE88+rKJxwgj4fOrR8kXjsMbjrLvjbvy3eeO+MMzTwXInLqRJLQkTdaMvyEsYKuZuqJQtLQiRnevfvn00GktE+xCfCUlvOlErckujZM5sliz/wAfjYx+Dkk8MfO+5uMpGoMUOG6AX5yCP63IvEsGHluZt27lQ30/HHw1e/Wnz7/v01U6SS4HUlIgFaVOTbMXvS3E0hLImsgoR+MqlHV5ORTjwYHtqSGDZMre8slrz1NDTAT34SXuBAv0P+e2oi0Q5MmJAzQyu1JH77Wy2W+973SneBnHuurktdbiZRJYFr0IvYr+rmSXM3dVRLAkwkOitxSyK0SPjFhyDzwG9meGvCAtftgHc5DR2au1DLFQk/0cfbLhTjnHM0Pfapp0rfByq3JEaM0H3jwfL8O6sBAzR2ElIkQt/5mEh0TrIUCciJRL1eNzW67k0kkvAT+wkn5Hzc5bqbvGulnAlx5kytUSjX5VRJ4BpygbV459x8d5NIuKrrrCwJf0eVRRaJ0X6YSBSmsTHz9a3BRCKZuEh4hg4trxOs7yVUjkj07q31Ei++WPo+UJ0lAa1FIulYofo3mbvJKIe4391Eoi3HHNN6DfaMMJFIwvfTmTw5N+YXeS91sty1SxW+3Mn78MPbxgmKUU1MAlq/X1IgL5QlsWuXWiaVWD2FMJHonIjk/rcmEm35+tfLd01XgIlEEjNm6M+FF+bGfLVxqS4n38K33JRM3wK4HEJZEs61dTdBuHbhu3frFzK0eWwi0XlpbNQ6mCzqX+pdJPr2rUl9jbXlSKKhQesk4nhLotTg9a5dld39jBihd+379umXoxj792sRXjUxCS9K+/erOy3/SzNkiPZ5qpasllqM10kYnYuRI7NrfOhdNfWa3VQjzJIolUpEopIJMSlOUIhy15KI07+/iosXify1JDyDB+s25fQXamrSxoiLFuXGQneA9Zgl0Xm56CK47LJsjp3lsrSdCBOJUinX3bRzZ2Ui4Se8Ul1O1YiEiFoTXpDSjnXJJSqOc+YUFwrn4Ac/0AryZ56BBx/MvZaVSAwbpl/00GsaGO3PX/5ldas2FqJvX/jEJ+D887M5fifB3E2lUmtLolSRKHfp0qT38++VtgTonDlwxx1aQT57tq59keTe2rNHu93efz9ceqk2Z1u+PPd6Vkstdu+u63P4O0PDKJWsBKgTYZZEqQwapHfetYhJQG0sCWhtSaS5mwCuuUaFYuFCFYoki+KHP1SB+Id/gAUL4LTTcpXrkF1MArTLbsbtCQyjK2IiUSrdu2sAt5zspmosiY0bS9u+3KVLk94v35JIE5xPflLXwFi4UMUgn9/8BiZNghtv1Aym447T3lBeWLNyNxmGkRkmEuVQTmuOSmMShx2m6X61tiScS3c3xfnkJ3Wf/KrwQ4fg2Wdzq/iBNjeEnDVhImEYdYeJRDmU2prDucotCV9AVCuRGDFCXUe7dxd2N8XP7+yztaW5c7nxpUu1lqKQSGQVkzAMIzNMJMqhVEti716tXag0v7ucgrpqA9fx/k2lCs6558Latbq0pOfpp/UxLhLjxqkbbPlyFRSzJAyj7jCRKIdSRaKS5n5xRowoPyZRjSUBKkqluJtAu9VC6wWSnn5a16fwLU1A4xLHHqsisXevFupZcNkw6goTiXIo1d1USXO/OOVYEtUGruOWRCnuJtDGYqNG5eISzqlInHlm2zYkxx+vIpFVcz/DMDLFRKIchg7VdSIOHCi8XQhLYtOm1j7/NNrDkhBRl5OPS6xeret4x11NnuOPV9fUhg363ETCMOoKE4lyKLUTbLUi0diovZu8RVKIENlNkLMkREprpnbOOeoSe+215HiE57jj9HHxYn00kTCMusJEohxKbc3hRaKawDWU5nJ67z2t4ah0Ifd+/dRy8JZEv36lda71cYlf/1pFYsiQ1utveHyG0+9/r48WkzCMuqJikRCRSSLycuxnp4h8XkSGishCEXkzehwSbS8icquIrBSRV0XklNix5kbbvykic2Pjp4rIkmifW0XK7bsdmFJbc4RwN0FpwWu/Kl01H82IEbnsplKbnU2YoNlLTz6pInHGGcktwI86SgXMLAnDqEsqFgnn3Arn3EnOuZOAU4E9wIPAjcAi59xEYFH0HOBiYGL0Mw+4DUBEhgI3AzOA6cDNXliiba6N7Ter0vMNQqkiESJwDaVZEpWuJRGnoUHfK2ktiTRE1Jr41a/gjTeSXU0APXpoFfarr+pzEwnDqCtCuZvOA95yzq0BZgPzo/H5wJzo99nAvU55HhgsIqOAi4CFzrltzrlmYCEwK3ptoHPueeecA+6NHat9KNfdVC8iEbckyjnWuefmspbSRAI0LuGD/SYShlFXhBKJK4AfR783OueiVBbeBfxq5qOBtbF91kVjhcbXJYy3QUTmiUiTiDRtLnUdhkqolbspaVnRNCpdujT//XxMopze+j4u0bcvnHpq+nY+LgEmEoZRZ1QtEiLSC/gQ8NP81yILoIQ8zupwzt3unJvmnJvWkOWaAoMGqd+9FJHo108DypXQs6cKUq0tiXLcTaCtuY89Fv7kTwqvohcXCQtcG0ZdEWI9iYuBPzjnfJR1o4iMcs5tiFxGfqZbDxwR229MNLYeODtv/DfR+JiE7duPbt1K6wRbaXO/OKVWXfvAdTU0NGjK7YYNcPTR5e37yCPFU2Z9GqxI9edqGEZNCeFu+jg5VxPAAsBnKM0FHo6NXxVlOc0EdkRuqSeAC0VkSBSwvhB4Inptp4jMjLKaroodq/0opTVHpc394pRadR3KkgB4553yl3I86qjii/0cc4wK7IAB1WVhGYZRc6oSCRHpD1wA/Dw2/C3gAhF5Ezg/eg7wKLAKWAn8CPgMgHNuG/ANYHH08/VojGibO6J93gIeq+Z8gzB0aGmB62oXb6+lSHgX3d691R8rid691UKxeIRh1B1VuZuccy3AsLyxrWi2U/62Drgu5Th3AXcljDcBk6s5x+AMG1bcDVRLSyJE4NpbEpDdovBTp8KKFdkc2zCMzLA1rstl6NDWS3ImsXNn9estNzaqW2v//sLV1CEtCcjGkgD4/vdzWV+GYdQN1pajXEp1N4WwJCC3/nQaoQLXnqxEYtQojU0YhlFXmEiUy7Bhains35++TUiRKOZyCmFJ9OmTO9+s3E2GYdQlJhLlUkqhW6jAdbH3OXBAxSrE3b9/v6wsCcMw6hITiXLxK6+tWZP8+oEDGkyuhSVR7dKlcbz4mUgYhhHDRKJcJkzQx9Wrk1+vtiWHpzHqZlIok6raVenieFEyd5NhGDFMJMpl3Dh9fPvt5NdDicTAgdrqopAlUe2CQ3HMkjAMIwETiXLp21fv8ouJRLUxCZHitRIhRcJiEoZhJGAiUQnjx2dvSUBtRcJbEuZuMgwjholEJUyYkB6TqHbBoTjFRCJk4HrkSH201hmGYcQwkaiE8eO1Gd7Bg21fC2lJNDbWLnA9ezbcfjtM7lhdUAzDaF9MJCph/HitT9iwoe1roWISkLMkXMqSHCHdTf36wbXXWpdWwzBaYSJRCb5WIikuETomsXdves+jkCJhGIaRgIlEJfhaiSSRCB2TgPS4hImEYRgZYyJRCWPH6mNS8HrXLu3aWmy1tlIYPlwf05r8hQxcG4ZhJGAiUQl9+mhX0zR3U6h1nH1aappIhAxcG4ZhJGAiUSlptRIhmvt5vEhs2ZL8+p49GmgOYbUYhmEkYCJRKRMmpMckamlJ9OtnGUmGYWSGiUSlpNVKhHQ39e+vrqRCMQmLRxiGkSEmEpUyfry2BV+/vvV4SJEADV4XsiQsHmEYRoaYSFRKWq1EyJgEqMupmLvJMAwjI0wkKiWtViK0JdHQUDhwbSJhGEaGmEhUyhFHaMA4XyRCBq7BLAnDMNoVE4lK6d0bDj+8dUGdc7B7d+1EwgLXhmFkjIlENeTXSrS0qFCEjEkMH67H9dXVcSxwbRhGxphIVEN+rUTI5n6eQgV15m4yDCNjqhIJERksIj8TkddF5DUROV1EhorIQhF5M3ocEm0rInKriKwUkVdF5JTYceZG278pInNj46eKyJJon1tFOljV2PjxsHatpsJC2OZ+nkIFdSYShmFkTLWWxPeBx51zxwJTgdeAG4FFzrmJwKLoOcDFwMToZx5wG4CIDAVuBmYA04GbvbBE21wb229WlecblvHjtZhu3Tp9nqUlYSJhGEY7ULFIiMgg4IPAnQDOuX3Oue3AbGB+tNl8YE70+2zgXqc8DwwWkVHARcBC59w251wzsBCYFb020Dn3vHPOAffGjtUxyK+VCLngkKeQSFjg2jCMjKnGkpgAbAbuFpGXROQOEekPNDrn/JJt7wKN0e+jgbWx/ddFY4XG1yWMt0FE5olIk4g0bU7LBMoCXyuxapU+ZmFJpLULP3hQFySywLVhGBlSjUj0AE4BbnPOnQy0kHMtARBZAClrb4bDOXe7c26ac25ag7/zrgVjx8LIkTB/vmY1ZRGTGDwYundvG7i2tSQMw6gB1YjEOmCdc+6F6PnPUNHYGLmKiB79smrrgSNi+4+JxgqNj0kY7zj06AE33QRPPQWLFmVjSXTrlty/yValMwyjBlQsEs65d4G1IjIpGjoPWA4sAHyG0lzg4ej3BcBVUZbTTGBH5JZ6ArhQRIZEAesLgSei13aKyMwoq+mq2LE6DvPmafX13/99NiIByQV1JhKGYdSAHlXu/z+BfxeRXsAq4GpUeB4QkWuANcBHo20fBS4BVgJ7om1xzm0TkW8Ai6Ptvu6c2xb9/hngHqAv8Fj007Ho3Rv+7u/g05+G/fu1VUf//mHfI0kkvLvJYhKGYWRIVSLhnHsZmJbw0nkJ2zrgupTj3AXclTDeBEyu5hxrwtVXwy23wIsvamZT6HKO4cPhlVdaj5klYRhGDbCK6xD07An/63/p76FdTZDcCdZEwjCMGmAiEYorr4RJk2Do0PDHbmiAbdtyld1gImEYRk2oNiZheHr0gEceyaXBhsSn9W7dCo1R2YmJhGEYNcBEIiRHH53NceNV114kLHBtGEYNMHdTPeCrruNxCbMkDMOoASYS9UBS/yYTCcMwaoCJRD1gImEYRjthIlEPDBumj3GR8DGJPn1qfz6GYXQZTCTqgZ49tdFfviXRt2/4wj3DMIwYJhL1Qn5BnS04ZBhGDTCRqBfy+zf98Y8waFD7nY9hGF0CE4l6IS4SO3bA44/DJZe07zkZhtHpMZGoF+Ii8fOfw/vvw5//efuek2EYnR4TiXph+HCNSTgH//ZvWt09fXp7n5VhGJ0cE4l6oaFBG/wtWwZPPqlWhGU2GYaRMSYS9YIvqLv1VrUmrryyfc/HMIwugYlEveBF4r774PTTs2smaBiGEcNEol7wImEBa8MwaoiJRL3gO8H26AEf/WjhbQ3DMAJhIlEveEvi4otzgmEYhpExtuhQvdCvH/zv/w2XXtreZ2IYRhfCRKKe+MpX2vsMDMPoYpi7yTAMw0jFRMIwDMNIxUTCMAzDSMVEwjAMw0ilKpEQkbdFZImIvCwiTdHYUBFZKCJvRo9DonERkVtFZKWIvCoip8SOMzfa/k0RmRsbPzU6/spoX2tWZBiGUUNCWBLnOOdOcs5Ni57fCCxyzk0EFkXPAS4GJkY/84DbQEUFuBmYAUwHbvbCEm1zbWy/WQHO1zAMwyiRLNxNs4H50e/zgTmx8Xud8jwwWERGARcBC51z25xzzcBCYFb02kDn3PPOOQfcGzuWYRiGUQOqFQkH/EpEXhSRedFYo3NuQ/T7u0Bj9PtoYG1s33XRWKHxdQnjbRCReSLSJCJNm+NLfBqGYRhVUW0x3Qecc+tFZASwUERej7/onHMi4qp8j6I4524HbgcQkc0isqbCQw0HtgQ7sfrHPo8c9lm0xj6P1nSGz2Nc0mBVIuGcWx89bhKRB9GYwkYRGeWc2xC5jDZFm68HjojtPiYaWw+cnTf+m2h8TML2xc6poaI/BhCRplhspctjn0cO+yxaY59Hazrz51Gxu0lE+ovIYf534EJgKbAA8BlKc4GHo98XAFdFWU4zgR2RW+oJ4EIRGRIFrC8Enohe2ykiM6OspqtixzIMwzBqQDWWRCPwYJSV2gP4D+fc4yKyGHhARK4B1gC+r/WjwCXASmAPcDWAc26biHwDWBxt93Xn3Lbo988A9wB9gceiH8MwDKNGiCYOGaAB8Ci+YWCfRxz7LFpjn0drOvPnYSJhGIZhpGJtOQzDMIxUTCQMwzCMVEwkIkRkloisiPpE3Vh8j86DiBwhIk+KyHIRWSYi10fjiX24ugoi0l1EXhKRR6LnE0TkhegauV9EerX3OdYKERksIj8TkddF5DUROb2rXh8i8tfR92SpiPxYRPp05mvDRAKdDIAfoP2ljgc+LiLHt+9Z1ZQDwBecc8cDM4Hror8/rQ9XV+F64LXY81uA7znnjgaagWva5azah+8DjzvnjgWmop9Ll7s+RGQ08DlgmnNuMtAduIJOfG2YSCjTgZXOuVXOuX3AT9BeU10C59wG59wfot93oRPAaNL7cHV6RGQMcClwR/RcgHOBn0WbdJnPQ0QGAR8E7gRwzu1zzm2n614fPYC+ItID6AdsoBNfGyYSSlr/qC6HiIwHTgZeIL0PV1fgn4C/BQ5Fz4cB251zB6LnXekamQBsBu6O3G93RAW0Xe76iLpMfBt4BxWHHcCLdOJrw0TC+G9EZADwn8DnnXM7469FnXi7RL60iFwGbHLOvdje59JB6AGcAtzmnDsZaCHPtdRVro8o7jIbFc7Dgf508iUMTCSUtL5SXQYR6YkKxL87534eDW+M+m+R14ers3MG8CEReRt1PZ6L+uQHRy4G6FrXyDpgnXPuhej5z1DR6IrXx/nAaufcZufcfuDn6PXSaa8NEwllMTAxylDohQaiFrTzOdWMyN9+J/Cac+67sZfS+nB1apxzX3bOjXHOjUevhV87564EngQujzbrSp/Hu8BaEZkUDZ0HLKdrXh/vADNFpF/0vfGfRae9NqziOkJELkH90N2Bu5xz32zfM6odIvIB4GlgCTkf/E1oXOIBYCxRH65YX60ugYicDXzROXeZiByJWhZDgZeAP3fO7W3H06sZInISGsTvBaxCe691owteHyLyNeBjaFbgS8Cn0BhEp7w2TCQMwzCMVMzdZBiGYaRiImEYhmGkYiJhGIZhpGIiYRiGYaRiImEYhmGkYiJhGIZhpGIiYRiGYaTy/wGMP+lWvddbpwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(inv_yhat,'r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "334e9396",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "inv_yhat=pd.DataFrame(data=inv_yhat)\n",
    "inv_yhat.to_csv('inv_y.csv')\n",
    "inv_yhat.to_csv('shang04_max_pre.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "776d1290",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
